home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 16 / AMIGAplus Sonderheft 16 (1998)(ICP)(DE)[!].iso / pd / anwendungen / xpk_source / shell / xquery.c < prev    next >
C/C++ Source or Header  |  1998-08-27  |  3KB  |  107 lines

  1. #define NAME        "xQuery"
  2. #define DISTRIBUTION    "(Freeware) "
  3. #define REVISION    "4"
  4.  
  5. /* Programmheader
  6.  
  7.     Name:        xQuery
  8.     Author:        SDI (before 1.2 Urban Dominik Müller)
  9.     Distribution:    Freeware
  10.     Description:    Query packer properties
  11.     Compileropts:    -
  12.     Linkeropts:    -l xpkmaster
  13.  
  14.  1.0    : first public release
  15.  1.1    : version string added, docs added
  16.  1.2    : changes by SDI
  17.  1.3   29.11.96 : fixed for new includes and Maxon C++
  18.  1.4   12.05.97 : allways showed default mode 0 - fixed
  19. */
  20.  
  21. #include "SDI_defines.h"
  22. #define SDI_TO_ANSI
  23. #include "SDI_ASM_STD_protos.h"
  24. #include <proto/exec.h>
  25. #include <proto/dos.h>
  26. #include <proto/xpkmaster.h>
  27.  
  28. #ifdef __MAXON__
  29.   #define __asm
  30. #endif
  31.  
  32. struct Library *XpkBase = 0;
  33.  
  34. UBYTE errbuf[XPKERRMSGSIZE];
  35. UBYTE line1[200], line2[200], line3[200], line4[200];
  36. UBYTE line5[200], line6[200], line7[200];
  37.  
  38. void end(const STRPTR text)
  39. {
  40.   if(text)    printf(text);
  41.   if(XpkBase)    CloseLibrary (XpkBase);
  42.   exit(text ? 10 : 0);
  43. }
  44.  
  45. void packerquery(STRPTR packer)
  46. {
  47.   struct XpkPackerInfo xpinfo;
  48.   struct XpkMode xminfo;
  49.   LONG mode, res;
  50.   UBYTE name[5];
  51.  
  52.   printf("\23332mPacker :\233m %s\n", packer);
  53.  
  54.   if(res = XpkQueryTags(XPK_PackerQuery, &xpinfo,
  55.             XPK_PackMethod, packer,
  56.             TAG_DONE))
  57.     return;
  58.  
  59.   printf("\23332mName   :\233m %s\n", xpinfo.xpi_LongName);
  60.   printf("\23332mDescr. :\233m %s\n", xpinfo.xpi_Description);
  61.   printf("\23332mDefMode:\233m %ld\t", xpinfo.xpi_DefMode);
  62.   printf("\23332mDefChunk:\233m %ld Kb\t", xpinfo.xpi_DefChunk >> 10);
  63.   printf("\23332mMaxChunk:\233m %ld Kb\n", xpinfo.xpi_MaxChunk >> 10);
  64.  
  65.   printf("                      Pack  Unpack  Pack Unpack\n");
  66.   printf("Name   Mode  Ratio   Speed   Speed   Mem    Mem Description\n");
  67.   /*       FAST 99..100 99.7% 1024K/s 1040K/s 1024K  1024K Gnubbeldubbel */
  68.  
  69.   CopyMem(packer, name, 4); name[4] = 0;
  70.  
  71.   for(mode = 0; mode < 100 && !CTRL_C; mode = xminfo.xm_Upto + 1)
  72.   {
  73.     if(XpkQueryTags(XPK_ModeQuery, &xminfo,
  74.             XPK_PackMethod, packer,
  75.             XPK_PackMode, mode,
  76.             TAG_DONE))
  77.       break;
  78.     printf("%4.4s %2ld..%-3ld %2ld.%1ld%% %4ldK/s %4ldK/s %4ldK  %4ldK %s\n",
  79.       name, mode, xminfo.xm_Upto, xminfo.xm_Ratio / 10, xminfo.xm_Ratio % 10,
  80.         xminfo.xm_PackSpeed, xminfo.xm_UnpackSpeed,
  81.         xminfo.xm_PackMemory >> 10, xminfo.xm_UnpackMemory >> 10,
  82.         xminfo.xm_Description);
  83.   }
  84.   printf("\n");
  85. }
  86.  
  87. void main(int argc, char **argv)
  88. {
  89.   struct XpkPackerList list;
  90.   LONG i;
  91.  
  92.   if(!(XpkBase = OpenLibrary(XPKNAME, 0)))
  93.     end("Cannot open " XPKNAME "\n");
  94.  
  95.   if(XpkQueryTags(XPK_PackersQuery, &list, TAG_DONE))
  96.     end("Cannot get information");
  97.  
  98.   if(argc == 1)
  99.     for(i = 0; i < list.xpl_NumPackers && !CTRL_C; i++)
  100.       packerquery(list.xpl_Packer[i]);
  101.   else
  102.     for(i = 1; i < argc; i++)
  103.       packerquery(argv[i]);
  104.   
  105.   end(CTRL_C ? "***Break\n" : NULL);
  106. }
  107.